/*
 * @(#)AnnotationDesc.java 1.3 04/04/08
 * 
 * Copyright 2004 Sun Microsystems, Inc. All rights reserved. SUN
 * PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */

package com.sun.javadoc;

/**
 * Represents an annotation. An annotation associates a value with each element
 * of an annotation type.
 * 
 * @author Scott Seligman
 * @version 1.3 04/04/08
 * @since 1.5
 */
public interface AnnotationDesc {
	
	/**
	 * Returns the annotation type of this annotation.
	 * 
	 * @return the annotation type of this annotation.
	 */
	AnnotationTypeDoc annotationType();
	
	/**
	 * Returns this annotation's elements and their values. Only those
	 * explicitly present in the annotation are included, not those assuming
	 * their default values. Returns an empty array if there are none.
	 * 
	 * @return this annotation's elements and their values.
	 */
	ElementValuePair[] elementValues();
	
	/**
	 * Represents an association between an annotation type element and one of
	 * its values.
	 * 
	 * @author Scott Seligman
	 * @version 1.3 04/04/08
	 * @since 1.5
	 */
	public interface ElementValuePair {
		
		/**
		 * Returns the annotation type element.
		 * 
		 * @return the annotation type element.
		 */
		AnnotationTypeElementDoc element();
		
		/**
		 * Returns the value associated with the annotation type element.
		 * 
		 * @return the value associated with the annotation type element.
		 */
		AnnotationValue value();
	}
}
